package com.iflytek.jcy.supervise.job.common.enums;

/**
 * 结果枚举
 *
 * @author <a href=mailto:ktyi@iflytek.com>伊开堂</a>
 * @date 2019-08-06 11:37
 */
public enum ResultEnum implements ResultType {
    /** 成功 */
    SUCCESS(ResultType.SUCCESS, "成功"),

    /** 失败 */
    EXCEPTION(7, "系统异常"),
    /** 失败 */
    FAILED(9, "失败"),

    /* ==================== 通用错误 ===================== */
    /** 参数不合法 */
    INVALID_PARAMETER(1001, "参数不合法"),
    /** 参数缺失 */
    PARAMETER_MISSING(1002, "参数缺失"),
    /** 不支持该参数值, 比如: 方法有一个枚举入参, 但内部实现只支持部分枚举值 */
    PARAMETER_VALUE_UNSUPPORTED(1003, "不支持该参数值"),
    /** 参数类型错误 */
    INVALID_PARAMETER_TYPE(1004, "参数类型错误"),
    /** 参数为null或size为0 */
    PARAMETER_IS_EMPTY(1005, "参数不能为空"),
    /** 参数长度超过限制 */
    PARAMETER_SIZE_OVER_LIMIT(1006, "参数长度超过上限"),
    /** 该接口不支持此http方法 */
    HTTP_METHOD_NOT_SUPPORT(1010, "该接口不支持此http方法"),


    /* ==================== 业务错误 ===================== */
    /* ---- 数据源模块 2xxx ---- */
    DATABASE_SAVE_FAILED(2001, "数据保存失败"),
    /** 数据更新失败 */
    DATABASE_UPDATE_FAILED(2002, "数据更新失败"),
    /** 数据删除失败 */
    DATABASE_DELETE_FAILED(2003, "数据删除失败"),
    /** 数据不存在 */
    DATABASE_ITEM_NOT_EXIST(2004, "数据不存在"),

    // Redis 21xx

    // fastDFS 22xx
    /** fastDFS文件上传失败 */
    FASTDFS_UPLOAD_ERROR(2201, "fastDFS文件上传失败"),
    /** fastDFS文件上传失败 */
    FASTDFS_DOWNLOAD_ERROR(2202, "fastDFS文件上传失败"),


    /* ---- 外部接口 3xxx ---- */


    /* ---- 功能模块 4xxx ---- */
    /* 用户 41xx */
    AUTH_ERROR(4100, "权限异常"),
    /** 当前用户还未登录 */
    LOGIN_REQUIRED(4101, "当前用户还未登录"),
    /** 当前用户没有配置必要的角色 */
    ROLE_MISSING(4102, "当前用户没有配置必要的角色"),
    /** 当前用户没有权限 */
    PERMISSION_MISSING(4103, "当前用户没有权限"),
    /** 当前用户没有权限 */
    DISABLED_ERROR(4104, "当前用户没有权限"),

    /* 标签错误 42xx */
    /** 标签名已存在 */
    FIELD_NAME_EXIST(4201, "标签名已存在"),
    /** 表字段已配置标签 */
    FIELD_TABLE_COLUMN_NAME_EXIST(4201, "表字段已配置标签"),
    /** 标签规则解析错误 */
    FIELD_SQL_PARSE_ERROR(4203, "标签规则解析错误"),

    /* 数据集 43xx */
    /** 数据集名称已存在 */
    DATASET_NAME_EXIST(4301, "数据集名称已存在"),
    /** 子数据集名称已存在 */
    SUB_DATASET_NAME_EXIST(4302, "子数据集名称已存在"),
    /** 数据集对应数据库视图创建失败 */
    DATASET_VIEW_CREATE_FAILED(4303, "数据集对应数据库视图创建失败"),

    /* 规则 44xx */
    /** 规则名称已存在 */
    RULE_NAME_EXIST(4401, "规则名称已存在"),


    /* 模型 45xx */
    /** 模型名称已存在 */
    MODEL_NAME_EXIST(4501, "模型名称已存在"),

    ;

    private Integer code;
    private String desc;

    ResultEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public static ResultEnum getByCode(Integer code) {
        if (code == null) {
            return null;
        }

        for (ResultEnum anEnum : values()) {
            if (anEnum.getCode().equals(code)) {
                return anEnum;
            }
        }

        return null;
    }

    @Override
    public Integer getCode() {
        return code;
    }

    @Override
    public String getDesc() {
        return desc;
    }
}